# 集合：与列表和字典一样都属于可变类型的序列   集合是没有value的字典
# 集合的创建
s = {'1', '2', '3', '6', '3'}
print(s)  # 集合中的元素不允许重合
# 用内置函数set 创建集合
s1 = set(range(6))
print(s1)
s2 = set([1, 2, 3, 4, 5, 6, 9, 8])  # 把列表转换成集合
print(s2)
s3 = set((1, 2, 3, 4))  # 把元组转换成集合
print(s3)
s4 = set('hehehehehe1133')  # 字符串转成集合
print(s4)
s5 = set({12, 3, 56, 8, 3})
print(s5)
# 定义一个空集合
s6 = {}
print(type(s6))  # 结果是字典类型  所以
s7 = set()  # 这样结果是集合类型
print(type(s7))

# 集合的判断操作
# in /not in
s8 = {'10', '20', '30', '40', '50'}
print(10 in s8, '判断存在否？')
# 集合添加元素
s8.add(80)  # 添加了一个元素
print(s8)
s8.update({200, 300, 500})  # 注意花括号 把集合添加到集合中   里面还可以放列表【】  或者元组（）
print(s8, 'text1')
# 结合删除元素
s8.remove(200)
print(s8, 'text2')  # 删除一个存在的元素  不存在报错
s8.discard(1000)  # 删除一个元素  不存在的也不会报错
print(s8, 'text3')
s8.pop()  # 随机删除一个元素
print(s8, 'text4')
s8.clear()  # 清空
print(s8, 'text9')

#      集合之间的关系
s11 = {1, 2, 3}
s12 = {3, 2, 1}
s111 = {6, 7, 2, 4}
print(s11 == s12)  # 判断集合是否相等  元素相等就相等

s13 = {1, 2}  # 判断一个子集是否为另一个集合的子集  判断一个子集是否为另一个集合的超集
print(s13.issubset(s11))  # s13是s11的子集吗？
print(s11.issuperset(s13), 'text10')  # s11是s13的超集吗？

print(s11.isdisjoint(s111))  # s11 和 s111是否没有交集吗   答案false  所以有交集

#       集合的数学操作
s22 = {10, 20, 30, 40}
s21 = {10, 30, 50, 88, 99}
print(s22.intersection(s21))  # 两种都是求《交集》的方法
print(s22 & s21)  # ↑

print(s21.union(s22))  # 求《并集》
print(s21 | s22)

print(s21.difference(s22))  # 求差集   s21-s21&s22
print(s21 ^ s22)     #求对称差集     并集－交集

# 集合生成式
a= {i*i for i in range(10)}
print(a)
